<?php
namespace Admin\Controller;
use Think\Controller;
/**
* admin
*/
class AuthController extends CommonController
{
	//权限页
	public function index()
	{
		//权限规则列表
		$auth_rule = M('auth_rule');
		$rule_list = $auth_rule->field('id,name,title,status')->order('name')->select();
		$this->assign('rule_list',$rule_list);

		//角色列表
		$auth_group = M('auth_group');
		$group_list = $auth_group->select();

		//角色组规则数字转义汉字
		$rulearr = '';
		for ($i=0; $i < count($rule_list); $i++) {
			$rulearr[$rule_list[$i]['id']] = $rule_list[$i]['title'];
		}
		foreach ($group_list as $key => $value) {
			$group_list[$key]['rule'] = explode(',', $value['rules']);
			$arr = '';
			for ($i=0; $i < count($group_list[$key]['rule']); $i++) { 
				$arr[] = $rulearr[$group_list[$key]['rule'][$i]];
			}
			$group_list[$key]['rules'] = implode('，', $arr);
		}
		$this->assign('group_list',$group_list);

		//权限分配
		$auth_group_access = M('auth_group_access');
		$access_list = $auth_group_access
		->field('xwcms_admin.id,xwcms_admin.username,xwcms_auth_group.title')
		->join('RIGHT JOIN xwcms_admin ON xwcms_auth_group_access.uid = xwcms_admin.id')
		->join('LEFT JOIN xwcms_auth_group ON xwcms_auth_group_access.group_id = xwcms_auth_group.id')
		->select();
		$this->assign('access_list',$access_list);
		$this->display();
	}
	//添加权限规则
	public function rule_add()
	{
		if (IS_POST) {
			$rules = array(
			     array('title','require','权限名必须填写'), //默认情况下用正则进行验证
			     array('name','require','规则必须填写'), // 验证name字段
			     array('name','','规则已经存在',1,'unique',3),
			     array('status',array(0,1),'数据错误',0,'in'), // 当值不为空的时候判断是否在一个范围内
			);
			$auth_rule = M("auth_rule"); // 实例化auth_rule对象
			if (!$auth_rule->validate($rules)->create()){
			     // 如果创建失败 表示验证没有通过 输出错误提示信息
			     alertMes($auth_rule->getError());
			}else{
			    $res = $auth_rule->add();
			    if ($res) {
					alertMes('添加成功','/admin/auth');
				} else {
					alertMes('添加失败');
				}
			}
		} else {
			$this->display();
		}
	}
	//编辑权限规则
	public function rule_edit($id = null)
	{
		if (IS_POST) {
			$rules = array(
			     array('title','require','权限名必须填写'), //默认情况下用正则进行验证
			     array('name','require','规则必须填写'), // 验证name字段
			     array('status',array(0,1),'数据错误',0,'in'), // 当值不为空的时候判断是否在一个范围内
			);
			$auth_rule = M('auth_rule');
			if (!$auth_rule->validate($rules)->create()){
				// 如果创建失败 表示验证没有通过 输出错误提示信息
				alertMes($auth_rule->getError());
			}else{
				 // 验证通过 可以进行其他数据操作
				$res = $auth_rule->save();
				if ($res) {
					alertMes('编辑成功','/admin/auth');
				} else {
					alertMes('编辑失败');
				}
			}
		} else {
			if (!empty($id)) {
				$auth_rule = M('auth_rule');
				$rule_data = $auth_rule->getById($id);
				$this->assign('rule_data',$rule_data);
			} else {
				alertMes('请选择编辑用户','/admin/auth/index');
			}
			$this->display();
		}
	}
	//删除权限规则
	public function rule_del($id = null)
	{
		if (!empty($id)) {
			$auth_rule = M('auth_rule');
			$res = $auth_rule->where('id=' . $id)->delete();
			if ($res) {
				alertMes('删除成功', '/admin/auth');
			} else {
				alertMes('删除失败');
			}
		} else {
			alertMes('用户不存在，无法删除');
		}
	}
	//添加角色组
	public function group_add()
	{
		if (IS_POST) {
			$rules = array(
			     array('title','require','角色组名必须填写'), //默认情况下用正则进行验证
			     array('status',array(0,1),'数据错误',0,'in'), // 当值不为空的时候判断是否在一个范围内
			);
			$auth_group = M("auth_group"); // 实例化auth_group对象
			$group_arr = $auth_group->validate($rules)->create();
			if (!$group_arr){
			     // 如果创建失败 表示验证没有通过 输出错误提示信息
			     alertMes($auth_group->getError());
			}else{
				$rulesarr = array_keys($group_arr['rules']);
				$group_arr['rules'] = implode(',',$rulesarr);
			    $res = $auth_group->add($group_arr);
			    if ($res) {
					alertMes('添加成功','/admin/auth');
				} else {
					alertMes('添加失败');
				}
			}
		} else {
			//权限规则列表
			$auth_rule = M('auth_rule');
			$rule_list = $auth_rule->where('status=1')->field('id,title,name')->order('name')->select();
			$rule = C('RULE');
			foreach ($rule_list as $key => $value) {
				$rule_name = explode('/', $value['name']);
				$rule_lists[$rule[$rule_name[0]]][] = $value;
			}
			$this->assign('rule_list',$rule_lists);
			$this->display();
		}
	}
	//编辑角色组
	public function group_edit($id = null)
	{
		if (IS_POST) {
			$rules = array(
			     array('title','require','角色组名必须填写'), //默认情况下用正则进行验证
			     array('status',array(0,1),'数据错误',0,'in'), // 当值不为空的时候判断是否在一个范围内
			);
			$auth_group = M("auth_group"); // 实例化auth_group对象
			$group_arr = $auth_group->validate($rules)->create();
			if (!$group_arr){
			     // 如果创建失败 表示验证没有通过 输出错误提示信息
			     alertMes($auth_group->getError());
			}else{
				$rulesarr = array_keys($group_arr['rules']);
				$group_arr['rules'] = implode(',',$rulesarr);
			    $res = $auth_group->save($group_arr);
			    if ($res) {
					alertMes('编辑成功','/admin/auth');
				} else {
					alertMes('编辑失败');
				}
			}
		} else {
			if (!empty($id)) {
				$auth_group = M('auth_group');
				$group_data = $auth_group->getById($id);
				$this->assign('group_data',$group_data);
				//分解用户规则字符串为数组
				$group_rule = explode(',', $group_data['rules']);
				$this->assign('group_rule',$group_rule);
				//权限规则列表
				$auth_rule = M('auth_rule');
				$rule_list = $auth_rule->where('status=1')->field('id,title,name')->order('name')->select();
				$rule = C('RULE');
				foreach ($rule_list as $key => $value) {
					$rule_name = explode('/', $value['name']);
					$rule_lists[$rule[$rule_name[0]]][] = $value;
				}
				$this->assign('rule_list',$rule_lists);
				$this->display();
			} else {
				alertMes('请选择编辑用户','/admin/auth/index');
			}
		}
	}
	//删除角色组
	public function group_del($id = null)
	{
		if (!empty($id)) {
			$auth_group = M('auth_group');
			$res = $auth_group->where('id=' . $id)->delete();
			if ($res) {
				alertMes('删除成功', '/admin/auth');
			} else {
				alertMes('删除失败');
			}
		} else {
			alertMes('用户不存在，无法删除');
		}
	}
	//编辑用户角色
	public function access_edit($id = null)
	{
		if (IS_POST) {
			$group_id = I('post.group_id');
			if (empty($group_id)) {
				alertMes('请选择用户所属权限组');
			}
			$auth_group_access = M('auth_group_access');
			$arr = $auth_group_access->create();
			$access_arr['group_id'] = $arr['group_id'];
			$auth_group_access->where('uid='.$arr['uid'])->save($access_arr);
			alertMes('编辑成功','/admin/admin/index');
		} else {
			if (!empty($id)) {
				$auth_group_access = M('auth_group_access');
				$access_data = $auth_group_access
								->field('xwcms_auth_group_access.uid,xwcms_auth_group_access.group_id,xwcms_admin.username,xwcms_auth_group.title')
								->join('LEFT JOIN xwcms_admin ON xwcms_auth_group_access.uid = xwcms_admin.id')
								->join('LEFT JOIN xwcms_auth_group ON xwcms_auth_group_access.group_id = xwcms_auth_group.id')
								->where('uid='.$id)
								->find();
				$this->assign('access_data',$access_data);

				$auth_group = M('auth_group');
				$auth_group_list = $auth_group->where('status=1')->field('id,title')->select();
				$this->assign('auth_group_list',$auth_group_list);
				$this->display();
			} else {
				alertMes('请选择分配用户','/admin/admin/index');
			}
		}
	}
}